﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.Caching;
using System.Runtime.CompilerServices;
namespace FSY.API.CacheManager
{
    /// <summary>
    /// 
    /// </summary>
    public class Fsy_Cache
    {
        /// <summary>
        /// Lấy 1 object lưu trữ trong cache
        /// </summary>
        /// <param name="cacheKey">key của object trong cache</param>
        /// <returns></returns>
        public static object GetCache(string cacheKey)
        {
            Cache objCache = HttpRuntime.Cache;
            return objCache.Get(cacheKey);
        }
        /// <summary>
        /// Xõa 1 object lưu trữ trong cache
        /// </summary>
        /// <param name="cacheKey">key của object trong cache</param>
        public static void RemoveCache(string cacheKey)
        {
            Cache objCache = HttpRuntime.Cache;
            if (objCache.Get(cacheKey) != null)
            {
                objCache.Remove(cacheKey);
            }
        }
        /// <summary>
        /// Lưu 1 đỗi tượng vào cache
        /// </summary>
        /// <param name="cacheKey">Key của đối tượng trong cache</param>
        /// <param name="objObject">đỗi tượng lưu</param>
        public static void SetCache(string cacheKey, object objObject)
        {
            Cache objCache = HttpRuntime.Cache;
            if (objObject != null)
                objCache.Insert(cacheKey, RuntimeHelpers.GetObjectValue(objObject));
        }
        /// <summary>
        /// Lưu 1 đỗi tượng vào cache
        /// </summary>
        /// <param name="cacheKey">Key của đối tượng trong cache</param>
        /// <param name="objObject">đối tượng lưu</param>
        /// <param name="slidingExpiration">Khoảng thời gian hết hạn mềm lưu trữ đối tượng trong cache</param>
        public static void SetCache(string cacheKey, object objObject, int slidingExpiration)
        {
            Cache objCache = HttpRuntime.Cache;
            if(objObject != null)
                objCache.Insert(cacheKey, RuntimeHelpers.GetObjectValue(objObject), null, Cache.NoAbsoluteExpiration, TimeSpan.FromSeconds(slidingExpiration));
        }
        /// <summary>
        /// Lưu 1 đỗi tượng vào cache
        /// </summary>
        /// <param name="cacheKey">Key của đối tượng trong cache</param>
        /// <param name="objObject">đối tượng lưu</param>
        /// <param name="absoluteExpiration">Khoảng thời gian hết hạn cứng lưu trữ đối tượng trong cache</param>
        public static void SetCache(string cacheKey, object objObject, DateTime absoluteExpiration)
        {
            Cache objCache = HttpRuntime.Cache;
            if (objObject != null)
                objCache.Insert(cacheKey, RuntimeHelpers.GetObjectValue(objObject), null, absoluteExpiration, Cache.NoSlidingExpiration);
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="CacheKey"></param>
        /// <param name="objObject"></param>
        /// <param name="objDependency"></param>
        public static void SetCache(string CacheKey, object objObject, CacheDependency objDependency)
        {
            if (objObject != null)
                HttpRuntime.Cache.Insert(CacheKey, RuntimeHelpers.GetObjectValue(objObject), objDependency);
        }
        /// <summary>
        /// SetCache
        /// </summary>
        /// <param name="CacheKey"></param>
        /// <param name="objObject"></param>
        /// <param name="objDependency"></param>
        /// <param name="AbsoluteExpiration"></param>
        /// <param name="SlidingExpiration"></param>
        public static void SetCache(string CacheKey, object objObject, CacheDependency objDependency, DateTime AbsoluteExpiration, TimeSpan SlidingExpiration)
        {
            if (objObject != null)
                HttpRuntime.Cache.Insert(CacheKey, RuntimeHelpers.GetObjectValue(objObject), objDependency, AbsoluteExpiration, SlidingExpiration);
        }
    }
}
